package com.itheima.controller.response;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

/**
 * @author robin
 * @version 1.0
 */
@Controller
public class ResponseViewController {

    /**
     * @TODO 需求1：当前端访问http://localhost:8080/view1时，直接跳转到http://localhost:8080/success.jsp,如何返回一个页面呢？
     */
    @RequestMapping(value = "/view1")
    public String view() {
        return "success";
    }

    /**
     * 将模型数据和视图封装在一起
     * ModelAndView
     *
     * @return
     */
    @RequestMapping("/view2")
    public ModelAndView view2() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("success");
        modelAndView.addObject("name", "model and view");
        return modelAndView;
    }

    /**
     * @TODO 需求2：请求http://localhost:8080/forward----->转发到另外一个 http://localhost:8080/view1，该如何实现？
     * 重定向和转发区别：
     * 1.请求：重定2次请求，转发1次请求
     * 2.地址url:重定会发生变化，转发不会发生变化
     * 3.request域是否能够：重定向到其他请求是无法继续使用request域。转发可以继续使用request域
     */
    @RequestMapping(value = "/aa")
    public String forward(Model model) {
        //request域中存储key/value
        model.addAttribute("name", "forward request");
        return "forward:/view1";
    }

    /**
     * 需求：请求重定向,http://localhost:80/bb (request域)---->重定向http://localhost:80/view1（request）
     */
    @RequestMapping(value = "/bb")
    public String redirect(RedirectAttributes redirectAttributes) {
        //model.addAttribute("name", "redirect request");
        //session.setAttribute("name","redirect request");但是当请求结束之后，该session会话就会结束，该session就没有
        redirectAttributes.addFlashAttribute("name", "redirect request");
        return "redirect:/view1";
    }
}
